import time

from event_handle.event_handle import get_llm_result

default_suggestion = """针对中国联通吉林省分公司发生的密码透出安全事件，以下为分阶段处置建议：

---

### **一、应急响应阶段**
1. **立即隔离风险接口**  
   - 暂停涉事接口的服务，阻断攻击者进一步利用漏洞的可能。  
   - 对相关服务器和网络流量进行临时隔离，确保事件影响范围可控。

2. **密码重置与通知**  
   - 强制重置事件中可能泄露的用户密码（如涉及用户端密码），并通过短信、邮件或APP通知用户主动更新密码。  
   - 若涉及内部系统管理员密码，需立即更换并启用多因素认证（MFA）。

3. **证据留存**  
   - 完整备份接口日志、网络流量记录、服务器快照及返回数据样本，用于后续取证和溯源分析。  
   - 记录事件时间线，明确首次发现时间、触发条件及潜在影响范围。

---

### **二、事件排查与分析**
1. **定位泄露源头**  
   - 审查涉事接口的代码逻辑，确认密码透出的具体位置（如调试信息误输出、接口设计缺陷）。  
   - 检查传输协议（HTTP/HTTPS）、数据加密方式（如是否明文传输或弱加密算法）。  
   - 分析是否其他接口存在类似敏感信息（如密钥、Token）泄露风险。

2. **攻击路径还原**  
   - 通过日志分析攻击者IP、请求频率、异常行为模式，判断是否为定向攻击或自动化扫描。  
   - 确认密码是否已被恶意获取（如检查近期异常登录、API调用记录）。

---

### **三、技术修复措施**
1. **接口安全加固**  
   - **移除明文传输**：确保接口返回内容中不包含密码、密钥等敏感信息，仅返回必要元数据。  
   - **强制HTTPS**：启用TLS 1.3加密传输，禁用HTTP明文协议，配置HSTS头。  
   - **数据脱敏**：对日志和接口返回内容中的敏感字段进行掩码处理（如替换为`***`）。

2. **密码存储与验证优化**  
   - 采用强哈希算法（如Argon2、bcrypt）存储密码，禁止明文或弱哈希（MD5/SHA-1）。  
   - 实施密码策略（复杂度要求、定期更换）和账户锁定机制（多次失败尝试后锁定）。

3. **代码审计与修复**  
   - 全面检查其他接口、第三方依赖库和配置文件，避免硬编码密码或调试信息泄露。  
   - 使用自动化工具（如SAST/DAST）扫描潜在漏洞。

---

### **四、长期安全加固建议**
1. **安全开发规范**  
   - 在开发流程中嵌入安全设计（如OWASP ASVS标准），禁止敏感信息透出到客户端。  
   - 建立代码Review机制，重点检查接口安全、权限控制和数据脱敏。

2. **监控与预警升级**  
   - 部署实时流量监控系统（如WAF、API网关），对异常请求（如高频访问、敏感字段匹配）触发告警。  
   - 定期进行渗透测试和红蓝对抗演练，验证防护措施有效性。

3. **合规与报告**  
   - 依据《网络安全法》《数据安全法》要求，评估事件等级并上报属地网信部门和公安机关（如需）。  
   - 内部形成事件分析报告，明确责任部门和整改计划，避免同类事件复发。

---

### **五、用户与舆论应对**
1. **透明沟通**  
   - 若事件涉及用户数据，需通过官方渠道发布公告，说明影响范围及已采取的补救措施。  
   - 提供用户密码重置指引和客服支持通道，降低用户信任度损失。

2. **舆情监测**  
   - 关注社交媒体和行业论坛，及时应对不实信息或恶意炒作。

---

通过以上措施，可最大限度降低事件影响，同时提升系统整体安全性。建议后续建立常态化安全运营体系，将安全能力融入研发和运维全流程。"""

ALARM_DETAIL_TEMPLATE = "经安全监测系统检测，{org_name}发生【{event_name}】安全事件。该事件首次发现于{event_time}，事件等级为{event_level}，告警详细信息：{alarm_desc}"


def get_problem_detail(event_name, event_level, event_time, org_name, alarm_name, alarm_type, alarm_desc,
                       violation_detail):
    event_time = int(event_time)
    event_time = time.strftime("%Y年%m月%d日%H时%M分%S秒", time.localtime(event_time))
    alarm_detail = ALARM_DETAIL_TEMPLATE.format(org_name=org_name, event_name=event_name, event_time=event_time,
                                                event_level=event_level, alarm_desc=alarm_desc)
    return alarm_detail


async def get_suggestion(alarm_detail, violation_detail, tags):
    suggestion = await get_llm_result(alarm_detail, violation_detail, tags)
    return suggestion
